package DAO;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

import ConexaoBackupBD.ConexaoBD;
import ConexaoBackupBD.MetodosVerificacaoBD;
import BD.AtividadesBD;
import smap.TelaCadAtividade;

/**
 *
 * @author dilso
 */
public class AtividadesDAO {
    
    // Conexão com o banco de dados
    ConexaoBD conBD = new ConexaoBD();
    
    // Metodo unique, data
    MetodosVerificacaoBD metBD = new MetodosVerificacaoBD();
    
    Statement BDAtividades;
    ResultSet rs;
    SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
   
    

    public void verificaExclusaoAtividade(String ra, String atividade){
        String tituloAtividade = "";
        
        String tituloAtividadeCreditosFaltantes = " RA " + ra + " ainda não concluiu todos os créditos.";
        String tituloAtividadeDocumentosFaltantes = " RA " + ra + " deve documentos.";

        if (atividade == "Documentos Faltantes"){
            tituloAtividade = tituloAtividadeDocumentosFaltantes;
        }
       else if(atividade == "Creditos faltantes"){
            tituloAtividade = tituloAtividadeCreditosFaltantes;
       }
        
        List<AtividadesBD> listaAtividades = filtro("tituloatividade",tituloAtividade,"Atividades");
        if(!listaAtividades.isEmpty()){
            for(AtividadesBD atv : listaAtividades){
              excluirAtividade(atv.getCodigoAtividade());
            }
        }
    }
    
    //método para criar um objeto do tipo AtividadesBD e posteriormente utilizar o método "inserir"
    
    public void inserirAlertaNoBanco(String data, String tituloAtividade, String descricaoAtividade){
        AtividadesBD at = new AtividadesBD();
        at.setHorario("09h00");
        at.setData(data);
        at.setTituloAtividade(tituloAtividade);
        at.setDescricaoAtividade(descricaoAtividade);
        at.setUsuarioSistema(1);
        at.setstatusAtividade(0);
        
        inserirAtividade(at);

    }
    
    public void inserirAlerta(String nome, Date dataIngresso, String ra, String atividade, int numeroAvisos) throws ParseException{
        //String dia = "01";
        Date date = new Date();
        
        String tituloAtividadeCreditosFaltantes = "O aluno " + nome + " RA " + ra + " ainda não concluiu todos os créditos.";
        String descricaoAtividadeCreditosFaltantes = "Até o presente momento, o aluno ainda não concluiu todos os créditos"
                                + " necessários para a apresentação de sua tese. Entrar em contato com o mesmo.";
        String tituloAtividadeDocumentosFaltantes = "O aluno " + nome + " RA " + ra + " deve documentos.";
        String descricaoAtividadeDocumentosFaltantes = "Até o presente momento o aluno "
                            + nome + ", RA " + ra + " não apresentou todos os documentos. Entre em contato com o mesmo para regularizar a situação.";

        CursoDAO curso = new CursoDAO();        
        date.setDate(01);
        String tituloAtividade = "";
        String descricaoAtividade = "";
                
        if (atividade == "Documentos Faltantes"){
            tituloAtividade = tituloAtividadeDocumentosFaltantes;
            descricaoAtividade = descricaoAtividadeDocumentosFaltantes;
        }
       else if(atividade == "Creditos faltantes"){
            tituloAtividade = tituloAtividadeCreditosFaltantes;
            descricaoAtividade = descricaoAtividadeCreditosFaltantes;
            try {
                date.setYear(date.getYear() + curso.buscarTempoCreditos(ra));
                
            } catch (SQLException ex) {
                Logger.getLogger(AtividadesDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
       }
        
        int numeroDeAvisos = 12 - date.getMonth();
        if(numeroDeAvisos >= numeroAvisos){
            for(int i = 0; i < numeroAvisos; i++){
                inserirAlertaNoBanco(formato.format(date), tituloAtividade , descricaoAtividade);
                date.setMonth(date.getMonth()+1);
            }
        }
        else{
            for(int i = 0; i < numeroDeAvisos; i++){
                inserirAlertaNoBanco(formato.format(date), tituloAtividade, descricaoAtividade);
                date.setMonth(date.getMonth()+1);
            }
        }
        
    }
           
    public boolean inserirAtividade(AtividadesBD at){
        try
        {
            Connection con = conBD.conectar();
            BDAtividades = con.createStatement();    

            at.setData(at.getData()); 

            BDAtividades.execute("INSERT INTO atividades VALUES ('0',"
                    + " '"+at.getHorario()+"','"+at.getTituloAtividade()+"',"
                    + " '"+at.getDescricaoAtividade()+"', '"+at.getData()+"',"
                    + " '"+at.getUsuarioSistema()+"', '"+at.getstatusAtividade()+"');");

            if(at.getUsuarioSistema() == 0)
                JOptionPane.showMessageDialog(null,"Atividade inserida com sucesso.", "Inserir", JOptionPane.INFORMATION_MESSAGE);

            con.close();
            return true;
        }
         
        catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,ex.getMessage(), "Erro no Banco", JOptionPane.ERROR_MESSAGE);
        }         
        return false;
    }
    
    public boolean alterarAtividade(AtividadesBD at) throws SQLException{
        String sql = "update atividades set data = ?,horario = ?, tituloatividade = ?, descricaoatividade = ?, status_atividade = ?";
        sql += " where cod_atividade = ?";
    
        try {
            Connection con = conBD.conectar();
            BDAtividades = con.createStatement();
            
            java.sql.PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, at.getData());
            ps.setString(2, at.getHorario());
            ps.setString(3, at.getTituloAtividade());
            ps.setString(4, at.getDescricaoAtividade());
            ps.setString(5, (String.valueOf(at.getstatusAtividade())));
            ps.setString(6, (String.valueOf(at.getCodigoAtividade())));

            if (ps.executeUpdate() > 0) {
                con.close();
                return true;
            } 
            else { 
                con.close();
                return false;
            }

        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null,e.fillInStackTrace()+"Não foi possível conectar ao banco.", "Erro no banco", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
  
    public boolean excluirAtividade(int codigoEnviado){
        String sql = "delete from atividades where cod_atividade = ?";
        try {
            Connection con = conBD.conectar();
            java.sql.PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, (String.valueOf(codigoEnviado)));
            if (ps.executeUpdate() > 0) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException e) {
             JOptionPane.showMessageDialog(null,"Não foi possivel conectar ao banco.", 
             "Erro no banco", JOptionPane.ERROR_MESSAGE);
             return false;
        }
    }
    
    
   public List<AtividadesBD> filtro(String campo, String valor, String tabela) {      
        List<AtividadesBD> listaFiltro = new ArrayList<AtividadesBD>(); 
        try { 
            Connection con = conBD.conectar();
            BDAtividades = con.createStatement();
            if(tabela == "Atividades"){
                rs = BDAtividades.executeQuery("SELECT * from atividades "
                        + " where "+campo+" like '%" + valor + "%' order by horario" );
            
                if (rs != null) {
                    while (rs.next()) { 
                        AtividadesBD at = new AtividadesBD();
                        at.setHorario(rs.getString("horario"));
                        at.setTituloAtividade(rs.getString("tituloatividade"));
                        at.setstatusAtividade(rs.getInt("status_atividade"));
                        at.setDescricaoAtividade(rs.getString("descricaoatividade"));
                        at.setData(rs.getString("data"));
                        at.setCodigoAtividade(rs.getInt("cod_atividade"));
                        at.setUsuarioSistema(rs.getInt("usuario_sistema"));
                        listaFiltro.add(at); 
                    }
                    return listaFiltro; 
                }
                else { 
                    return null; 
                } 
            }
            else{
                // = formato.format(valor);
                String anoAndMes = valor.substring(0, valor.length()-2);
                rs = BDAtividades.executeQuery("SELECT data from atividades where data like'"+anoAndMes+"%' group by(data)");
            
                if (rs != null) { 
                    while (rs.next()) { 
                        AtividadesBD at = new AtividadesBD();
                        at.setData(rs.getString("data"));
                        listaFiltro.add(at); 
                    }
                    return listaFiltro; 
                }
                else { 
                    return null; 
                } 
            }
        } catch (SQLException e) { 
            return null; 
        } 
    }     

}